home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / VISCAFE.BIN / Matrix.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-06-19  |  5.6 KB  |  353 lines

  1. package symantec.itools.awt;
  2.  
  3. public final class Matrix {
  4.    Matrix rowHead;
  5.    Matrix nextRow;
  6.    Matrix nextElt;
  7.    int row;
  8.    int col;
  9.    // $FF: renamed from: o java.lang.Object
  10.    Object field_0;
  11.  
  12.    public Matrix() {
  13.       this.rowHead = this;
  14.    }
  15.  
  16.    private Matrix(int var1, int var2, Object var3) {
  17.       this(var1, var2, var3, (Matrix)null);
  18.    }
  19.  
  20.    private Matrix(int var1, int var2, Object var3, Matrix var4, Matrix var5, Matrix var6) {
  21.       if (var4 == null) {
  22.          if (var2 != 0) {
  23.             this.rowHead = new Matrix(var1, 0, (Object)null, (Matrix)null, var5, this);
  24.          } else {
  25.             this.rowHead = this;
  26.          }
  27.       } else {
  28.          this.rowHead = var4;
  29.       }
  30.  
  31.       this.row = var1;
  32.       this.col = var2;
  33.       this.field_0 = var3;
  34.       this.nextRow = var5;
  35.       this.nextElt = var6;
  36.    }
  37.  
  38.    private Matrix(int var1, int var2, Object var3, Matrix var4, Matrix var5) {
  39.       this(var1, var2, var3, (Matrix)null, var4, var5);
  40.    }
  41.  
  42.    private Matrix(int var1, int var2, Object var3, Matrix var4) {
  43.       this(var1, var2, var3, (Matrix)null, var4, (Matrix)null);
  44.    }
  45.  
  46.    public synchronized void addElement(int var1, int var2, Object var3) throws IllegalArgumentException {
  47.       Matrix var4 = this.nearest(var1, var2);
  48.       if (var4.row != var1) {
  49.          var4.setNextRow((new Matrix(var1, var2, var3, var4.nextRow)).rowHead);
  50.       } else if (var2 == var4.col && var2 == 0) {
  51.          if (var4.field_0 != null) {
  52.             throw new IllegalArgumentException("Element already in Matrix");
  53.          } else {
  54.             var4.field_0 = var3;
  55.          }
  56.       } else {
  57.          var4.nextElt = new Matrix(var1, var2, var3, var4.rowHead, var4.nextRow, var4.nextElt);
  58.       }
  59.    }
  60.  
  61.    public synchronized void updateElement(int var1, int var2, Object var3) {
  62.       Matrix var4 = this.nearest(var1, var2);
  63.  
  64.       try {
  65.          if (var4 == null) {
  66.             this.addElement(var1, var2, var3);
  67.          } else if (var4.row == var1 && var4.col == var2) {
  68.             var4.field_0 = var3;
  69.          } else {
  70.             var4.addElement(var1, var2, var3);
  71.          }
  72.       } catch (IllegalArgumentException var6) {
  73.          ((Throwable)var6).printStackTrace();
  74.       }
  75.    }
  76.  
  77.    public synchronized void removeAllElements() {
  78.       this.nextRow = null;
  79.       this.nextElt = null;
  80.       this.field_0 = null;
  81.    }
  82.  
  83.    public synchronized Object elementAt(int var1, int var2) throws ArrayIndexOutOfBoundsException {
  84.       Matrix var3 = this.nearest(var1, var2);
  85.       if (var3 != null && var3.row == var1 && var3.col == var2 && var3.field_0 != null) {
  86.          return var3.field_0;
  87.       } else {
  88.          throw new ArrayIndexOutOfBoundsException("Element row=" + var1 + " col=" + var2 + " is not in matrix");
  89.       }
  90.    }
  91.  
  92.    public synchronized void removeElementAt(int var1, int var2) throws ArrayIndexOutOfBoundsException {
  93.       Matrix var3 = this.nearest(var1, var2);
  94.       if (var3 != null && var3.row == var1 && var3.col == var2) {
  95.          if (var2 == 0) {
  96.             var3.field_0 = null;
  97.          } else {
  98.             Matrix var4;
  99.             for(var4 = var3 = var3.rowHead; var3.col != var2; var3 = var3.nextElt) {
  100.                var4 = var3;
  101.             }
  102.  
  103.             var4.nextElt = var3.nextElt;
  104.          }
  105.       } else {
  106.          throw new ArrayIndexOutOfBoundsException("Element row=" + var1 + " col=" + var2 + " is not in matrix");
  107.       }
  108.    }
  109.  
  110.    public synchronized void removeRow(int var1) {
  111.       if (var1 == 0) {
  112.          this.field_0 = null;
  113.          this.nextElt = null;
  114.          if (this.nextRow != null) {
  115.             Matrix var2 = this.nextRow;
  116.             this.nextRow = var2.nextRow;
  117.             this.nextElt = var2.nextElt;
  118.             this.row = var2.row;
  119.             this.col = var2.col;
  120.             this.field_0 = var2.field_0;
  121.  
  122.             for(Matrix var3 = this.nextElt; var3 != null; var3 = var3.nextElt) {
  123.                var3.rowHead = this;
  124.             }
  125.  
  126.             for(Matrix var4 = this; var4 != null; var4 = var4.nextRow) {
  127.                var4.updateRowNum(var4.row - 1);
  128.             }
  129.  
  130.             return;
  131.          }
  132.       } else {
  133.          Matrix var5 = this.nextRow;
  134.  
  135.          Matrix var6;
  136.          for(var6 = this; var5 != null && var5.row < var1; var5 = var5.nextRow) {
  137.             var6 = var5;
  138.          }
  139.  
  140.          if (var5 != null) {
  141.             if (var5.row == var1) {
  142.                var6.nextRow = var5.nextRow;
  143.                var5.field_0 = null;
  144.                var5.nextElt = null;
  145.                var5 = var5.nextRow;
  146.             }
  147.  
  148.             while(var5 != null) {
  149.                var5.updateRowNum(var5.row - 1);
  150.                var5 = var5.nextRow;
  151.             }
  152.          }
  153.       }
  154.  
  155.    }
  156.  
  157.    public synchronized void insertRow(int var1) {
  158.       Matrix var2;
  159.       if (var1 == 0) {
  160.          var2 = new Matrix();
  161.          var2.setNextRow(this);
  162.       } else {
  163.          var2 = this.nearest(var1 - 1, 0);
  164.          Matrix var3 = new Matrix(var1, 0, (Object)null, var2.nextRow);
  165.          var2.setNextRow(var3);
  166.          var2 = var3;
  167.       }
  168.  
  169.       if (var2.nextRow.row == var1) {
  170.          var2 = var2.nextRow;
  171.  
  172.          while(var2 != null) {
  173.             ++var1;
  174.             var2.updateRowNum(var1);
  175.             var2 = var2.nextRow;
  176.             if (var2 != null && var2.row != var1) {
  177.                return;
  178.             }
  179.          }
  180.       }
  181.  
  182.    }
  183.  
  184.    public synchronized void sort(CompareFunc var1, int var2) {
  185.       boolean var3 = true;
  186.       Matrix var4 = this;
  187.       Object var5 = null;
  188.  
  189.       while(var4 != null) {
  190.          Matrix var6 = this.findLeast(var1, var4, var2, var3);
  191.          if (var6 != null) {
  192.             if (var4.row == 0 && var3) {
  193.                var3 = false;
  194.                this.swapRows(var6);
  195.                var4 = this;
  196.                continue;
  197.             }
  198.  
  199.             this.swapRows(var4, var6);
  200.          }
  201.  
  202.          if (var3) {
  203.             var3 = false;
  204.          } else {
  205.             var4 = var4.nextRow;
  206.          }
  207.       }
  208.  
  209.    }
  210.  
  211.    public synchronized void printRow(int var1) {
  212.       Matrix var2 = this.nearest(var1, 0);
  213.       if (var2.row != var1) {
  214.          var2 = var2.nextRow;
  215.          if (var2.row != var1) {
  216.             System.out.println("Row " + var1 + " is not in the matrix");
  217.             return;
  218.          }
  219.       }
  220.  
  221.       System.out.println("-------- Printing row " + var1 + " ----------");
  222.  
  223.       while(var2 != null) {
  224.          System.out.println("Row=" + var2.row + "  Col=" + var2.col + "  value=" + var2.field_0);
  225.          var2 = var2.nextElt;
  226.       }
  227.  
  228.    }
  229.  
  230.    public synchronized int rows() {
  231.       Matrix var1;
  232.       for(var1 = this; var1.nextRow != null; var1 = var1.nextRow) {
  233.       }
  234.  
  235.       return var1.nextElt == null && var1.field_0 == null ? var1.row : var1.row + 1;
  236.    }
  237.  
  238.    private synchronized void updateRowNum(int var1) {
  239.       for(Matrix var2 = this; var2 != null; var2 = var2.nextElt) {
  240.          var2.row = var1;
  241.       }
  242.  
  243.    }
  244.  
  245.    public synchronized MatrixEnumeration elements() {
  246.       return new MatrixEnumeration(this);
  247.    }
  248.  
  249.    public synchronized String toString() {
  250.       return "Matrix: row=" + this.row + " col=" + this.col + " o=" + this.field_0;
  251.    }
  252.  
  253.    private synchronized Matrix nearest(int var1, int var2) {
  254.       Matrix var3;
  255.       for(var3 = this; var1 > var3.row; var3 = var3.nextRow) {
  256.          if (var3.nextRow == null || var3.nextRow.row > var1) {
  257.             return var3;
  258.          }
  259.       }
  260.  
  261.       while(var3.nextElt != null && var2 >= var3.nextElt.col) {
  262.          var3 = var3.nextElt;
  263.       }
  264.  
  265.       return var3;
  266.    }
  267.  
  268.    private synchronized void setRowHead() {
  269.       Matrix var1 = this.nextElt;
  270.  
  271.       for(Matrix var2 = this; var1 != null; var1 = var1.nextElt) {
  272.          var1.rowHead = var2;
  273.       }
  274.  
  275.    }
  276.  
  277.    private synchronized void setNextRow(Matrix var1) {
  278.       for(Matrix var2 = this; var2 != null; var2 = var2.nextElt) {
  279.          var2.nextRow = var1;
  280.       }
  281.  
  282.    }
  283.  
  284.    private synchronized void swapRows(Matrix var1, Matrix var2) {
  285.       Matrix var3 = var1.nextRow;
  286.       Matrix var4 = var3.nextRow;
  287.       Matrix var5 = var2.nextRow;
  288.       Matrix var6 = var5.nextRow;
  289.       var1.setNextRow(var5);
  290.       var2.setNextRow(var3);
  291.       if (var2 == var3) {
  292.          var5.setNextRow(var3);
  293.       } else {
  294.          var5.setNextRow(var4);
  295.       }
  296.  
  297.       var3.setNextRow(var6);
  298.       int var7 = var3.row;
  299.       var3.updateRowNum(var5.row);
  300.       var5.updateRowNum(var7);
  301.    }
  302.  
  303.    private synchronized void swapRows(Matrix var1) {
  304.       Matrix var2 = var1.nextRow;
  305.       Matrix var3 = new Matrix(-1, var2.col, this.field_0, (Matrix)null, this.nextElt);
  306.       var1.rowHead.setNextRow(var3);
  307.       var3.setNextRow(var2.nextRow);
  308.       var3.updateRowNum(var2.row);
  309.       var3.setRowHead();
  310.       this.nextElt = var2.nextElt;
  311.       this.field_0 = var2.field_0;
  312.       this.setNextRow(this.nextRow);
  313.       this.updateRowNum(0);
  314.       this.setRowHead();
  315.    }
  316.  
  317.    private synchronized Matrix findLeast(CompareFunc var1, Matrix var2, int var3, boolean var4) {
  318.       if (!var4) {
  319.          var2 = var2.nextRow;
  320.       }
  321.  
  322.       if (var2 != null && var2.nextRow != null) {
  323.          Matrix var5 = var2.nextRow.rowHead;
  324.          Matrix var6 = var2.rowHead;
  325.          Matrix var7 = null;
  326.          var2 = var2.nearest(var2.row, var3);
  327.  
  328.          while(var5 != null) {
  329.             var5 = var5.nearest(var5.row, var3);
  330.             if (var5.col != var3) {
  331.                var6 = var5.rowHead;
  332.                var5 = var5.nextRow;
  333.             } else if (var2.col != var3) {
  334.                var2 = var5;
  335.                var7 = var6;
  336.             } else {
  337.                if (var1.lessThan(var5.field_0, var2.field_0)) {
  338.                   var2 = var5;
  339.                   var7 = var6;
  340.                }
  341.  
  342.                var6 = var5.rowHead;
  343.                var5 = var5.nextRow;
  344.             }
  345.          }
  346.  
  347.          return var7;
  348.       } else {
  349.          return null;
  350.       }
  351.    }
  352. }
  353.